package cn.agiledata.bank.linkbank.logic.payment;

import java.util.Map;

import cn.agiledata.bank.linkbank.exception.LinkBankException;

/**
 * 银行支付请求接口
 * 
 * @author maxianbo
 * 
 */
public interface BankPayRequest {

    /**
     * 向银行提交请求数据的方式:POST
     */
    public static final String SUBMIT_METHOD_POST = "POST";

    /**
     * 向银行提交请求数据的方式:GET
     */
    public static final String SUBMIT_METHOD_GET = "GET";

    /**
     * 
     * @return 银行url
     */
    public String getBankUrl();

    /**
     * 
     * @return 支付系统对于银行的商户URL，用于接收银行反馈信息
     */
    public String getMerchantUrl();

    /**
     * 返回向银行提交请求数据的方式：POST或GET
     * 
     * @return 向银行提交请求数据的方式
     */
    public String getSubmitMethod();

    /**
     * 
     * @return true if 银行支付请求各参数有效可向银行提交, otherwise false
     */
    public boolean isValid();

    /**
     * 
     * @return true if 银行支付请求被支持, otherwise false
     */
    public boolean isSupported();

    /**
     * 预处理参数，如校验参数
     */
    public void prepare() throws LinkBankException;

    /**
     * 
     * @param bankUrl
     *            银行url
     */
    public void setBankUrl(String bankUrl);

    /**
     * 
     * @param merchantUrl
     *            支付系统对于银行的商户URL，用于接收银行反馈信息
     */
    public void setMerchantUrl(String merchantUrl);

    /**
     * 
     * @return 所有参数
     */
    public Map getParameters();

    /**
     * 
     * @return 复制的BankPayRequest
     */
    public BankPayRequest copy();

}